/*互斥*/
#include <stdio.h>
#include <pthread.h>
#include <semaphore.h>
#include <unistd.h>

sem_t sem;
char ch = 'A';//共享资源：字符变量ch

/*更新字符*/
void* thread1(void* arg)
{
	usleep(50000);//延迟一会，以便先打印'A'

	while(1)
	{
		sem_wait(&sem);//---------------P
		if(ch == 'Z')	break;
		ch++;
		sem_post(&sem);//---------------V
		usleep(100000);//100ms
	}

	return NULL;
}

/*打印字符*/
void* thread2(void* arg)
{
	while(1)
	{
		sem_wait(&sem);//---------------P
		putchar(ch);
		fflush(stdout);
		sem_post(&sem);//---------------V

		if(ch == 'Z')
		{
			puts("");
			break;
		}
		usleep(100000);//100ms
	}

	return NULL;
}

int main()
{
	pthread_t tid1,tid2;
	/*初始化信号量*/
	sem_init(&sem,0,1);
	
	/*创建线程1、2*/
	pthread_create(&tid1,NULL,thread1,NULL);
	pthread_create(&tid2,NULL,thread2,NULL);
	
	/*等待线程1、2结束并回收*/
	pthread_join(tid1, NULL);
	pthread_join(tid2, NULL);
	
	/*销毁信号量*/
	sem_destroy(&sem);

	return 0;
}

